#pragma once
#include <xplatform/protobuf/xmsg_com.pb.h>
namespace LX{
    class LXMysql;
}
/// @brief 
class ConfigDao {
public:
    virtual ~ConfigDao();
    ConfigDao(const ConfigDao&)=delete;
    ConfigDao& operator=(const ConfigDao&)=delete;
    static ConfigDao* Get(){
        static ConfigDao _instance;
        return &_instance;
    }
    // 初始化数据库,非线程安全,会设置自动重连和超时
    bool Init(const char* ip,const char* user,const char* pwd,const char* dbname,unsigned short port=3306);
    // 安装数据库的表
    bool Install();
    // pb数据会被转为base64，解决编码问题
    bool SaveConfig(xmsg::XConfig* config);
    // 
    xmsg::XConfig LoadConfig(const char* ip,int port);
    //读取分页的配置列表
    /// @ param page 从1开始
    /// @ param page_count 每页数量
    /// @ return 配置列表,只包括：服务名称、IP、port
    xmsg::XConfigList LoadAllConfig(int page,int page_count);
    ///
    /// \brief ConfigDao
    ///
    bool DeleteConfig(const char*ip,int port);
private:
    ConfigDao();
    LX::LXMysql *m_mysql;
};
